/**
 * @Copyright 
 * @Project inetdisk
 * @CreateTime 2016年3月10日 下午8:57:47 @wxyz create file
 */
package ren.wxyz.inetdisk.controller.api;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import ren.wxyz.inetdisk.service.LoginService;
import ren.wxyz.inetdisk.util.Constants;
import ren.wxyz.inetdisk.vo.LoginUser;
import ren.wxyz.inetdisk.vo.RespMsg;

/**
 * <p>
 * 登录和登出
 * </p>
 * @CreateTime 2016年3月10日 下午8:57:47 @wxyz init class
 */
@Controller
@RequestMapping(value = "/api")
public class LoginController {

	@Autowired
	private LoginService loginService;
	
	/**
	 * <p>
	 * 登录校验
	 * </p>
	 * @param account 账号
	 * @param passwd 密码
	 * @return
	 * @CreateTime 2015-10-28 下午7:40:14 create method
	 */
	@RequestMapping(value = "/login.json", method = RequestMethod.POST)
	@ResponseBody
	public RespMsg<LoginUser> login(String account, String passwd, HttpServletRequest req) {
		RespMsg<LoginUser> msg = new RespMsg<>();
		
		do {
			// 校验空值
			if (StringUtils.isBlank(account) || StringUtils.isBlank(passwd)) {
				msg.setCode(Constants.MSG_LOGIN_ACCOUNT_BLANK);
				break;
			}
			
			// 校验账号是否有效
			LoginUser user = loginService.checkAccount(account, passwd);
			// 登陆成功
			if (user.getLoginStatus() == Constants.MSG_OK) {
				req.getSession(true).setAttribute(Constants.SESSION_KEY, user);
				msg.setData(user);
			}
			else {
				msg.setCode(user.getLoginStatus());
			}
			
			break;
		}
		while (true);
		
		// 根据状态设置不同的状态消息
		switch (msg.getCode()) {
		case Constants.MSG_OK:
			msg.setMsg("登录成功！");
			
			break;
		case Constants.MSG_LOGIN_ACCOUNT_BLANK:
			msg.setMsg("用户名或密码不能为空！");
			
			break;
		case Constants.MSG_LOGIN_ACCOUNT_ERROR:
			msg.setMsg("用户名或密码错误！");

			break;
		case Constants.MSG_LOGIN_ACCOUNT_LOCKED:
			msg.setMsg("该用户已经被锁定，请联系管理员！");

			break;
		default:
			msg.setCode(Constants.MSG_LOGIN_ACCOUNT_ERROR);
			msg.setMsg("用户名或密码错误！");
			break;
		}

		return msg;
	}
	
	/**
	 * <p>
	 * 校验登录状态
	 * </p>
	 * @param req
	 * @return
	 * @CreateTime 2016年3月10日 下午11:16:59 @wxyz create method
	 */
	@RequestMapping(value = "/verify.json")
	@ResponseBody
	public RespMsg<LoginUser> verify(HttpServletRequest req) {
		RespMsg<LoginUser> msg = new RespMsg<>(Constants.MSG_OK, "已经登录");
		
		HttpSession session = req.getSession();
		if (session != null) {
			LoginUser user = (LoginUser) session.getAttribute(Constants.SESSION_KEY);
			if (null != user) {
				msg.setData(user);
				return msg;
			}
		}
		
		msg.setCode(Constants.MSG_NOLOGIN);
		msg.setMsg("没有登录");
		
		return msg;
	}
	
	/**
	 * <p>
	 * 退出
	 * </p>
	 * @param req
	 * @return
	 * @CreateTime 2015-10-29 上午11:43:42 create method
	 */
	@RequestMapping(value = "/logout.json")
	@ResponseBody
	public RespMsg<String> logout(HttpServletRequest req) {
		RespMsg<String> msg = new RespMsg<>(Constants.MSG_OK, "登出成功");
		
		HttpSession session = req.getSession();
		if (session != null) {
			session.removeAttribute(Constants.SESSION_KEY);
		}
		
		return msg;
	}
}
